package com.niuke.stackqueue;

import java.util.Scanner;
import java.util.Stack;

/**
 * 括号匹配
 * 描述
 * 给定一个只包含三种字符的字符串，判断该字符串是否为有效的括号组合。
 * 字符串只包含三种字符（'('，')'，'['，']'，'{'，'}'）。
 * 括号必须按照"(()"，"())"，"()[]{}"的模式进行嵌套，例如"()()"，"([{}])"等是合法的括号组合，"())"，"([)]"等是非法的括号组合。
 *
 * 示例1
*/
 public class ValidBracketsTest03 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        if(s == null){
            return true;
        }
        Stack< Character> stack = new Stack<>();
        for(int i = 0; i < s.length(); i ++){
            Character c = s.charAt(i);
            if(c == '(' || c == '[' || c == '{'){
                stack.push(c);
            }
            else if(c == ')' || c == ']' || c == '}'){
                // 添加栈空检查
                if(stack.isEmpty()){
                    return false;
                }
                Character t = stack.pop();
                if(c == ')' && t != '(' || c == ']' && t != '[' || c == '}' && t != '{') {
                    return false;
                }
            }
            else {
                continue;
            }
        }
        if(stack.isEmpty()){
            return true;
        }
        return false;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入要测试的字符串:");
        String str = sc.next();
        ValidBracketsTest03 test = new ValidBracketsTest03();
        boolean valid = test.isValid(str);
        if (valid){
            System.out.println("测试通过");;
        }
        else {
            System.out.println("测试失败");
        }
    }
}
